import axios from 'axios';
import _     from 'lodash';

// 调用:alert.call
var alert = (vm,title, detail) => vm.$alert(title, detail, {confirmButtonText: '确定'});

// http请求错误回调方法 调用： onError
var onError = (vm, error) => {
    vm.loading = false;
    if(!error.response) return;

    var res = error.response;
    if(res.data.unAuthorizedRequest === true){
        vm.unAuthorized = true; // 未授权字段，调用方法自行处理
    }else if(res.data){
        alert(vm, res.data.error.message, res.data.error.details);
    }else{
        alert(vm, '异常', res.statusText);
    }
    return error;
};

export default {

    get(url,params,options){
        options = options||{};
        if(!options.silence) this.loading = true; // 请求前，启动loading动画

        var vm = this;
        return axios.get(url,{params:params}).then((res)=>{
           vm.loading = false; // 请求结束，结束loading动画
           return res;
       }).catch((error)=>{
            onError(vm, error);
            return Promise.reject(error);
       });
    },

    post(url, data, options){
        options = options||{};
        if(!options.silence) this.loading = true; // 请求前，启动loading动画
        var vm = this;
        return axios({
            method: 'post',
            url: url,
            data: data,
        }).then(function(res){
           vm.loading = false; // 请求结束，结束loading动画
           return res;
        }).catch((error)=>{
            onError(vm, error);
            return Promise.reject(error);
        });;
    },

    put(url, data, options){
        options = options||{};
        if(!options.silence) this.loading = true; // 请求前，启动loading动画
        
        var vm = this;
        return axios({
            method: 'put',
            url: url,
            data: data,
        }).then(function(res){
            vm.loading = false; // 请求结束，结束loading动画
            return res;
        }).catch((error)=>{
            onError(vm, error);
            return Promise.reject(error);
            return error;
        });;
    },

    buildQueryString(array, paramName){
        var items = _.map(array, (item,index)=>{
            return  paramName + '['+index+']='+item;
        });

        return '?' + items.join('&');
    },
}